﻿using System;
using GigaSite.Domain.Entities;
using Newtonsoft.Json;

namespace GigaSite.Web.Models
{
    /// <summary>
    /// Модель объявления
    /// </summary>
    public class AdvModel
    {
        /// <summary>
        /// Идентификатор объявления
        /// </summary>
        [JsonProperty("id")]
        public long Id { get; set; }

        /// <summary>
        /// Заголовок объявления - может и не быть
        /// </summary>
        [JsonProperty("title")]
        public string Title { get; set; }

        /// <summary>
        /// Содержимое объявления - присутствует всегда
        /// </summary>
        [JsonProperty("content")]
        public string Content { get; set; }

        /// <summary>
        /// Ключевые слова через запятые
        /// </summary>
        [JsonProperty("tags")]
        public string Tags { get; set; }

        /// <summary>
        /// Пользователь оставивший объявление
        /// </summary>
        [JsonProperty("user")]
        public string UserName { get; set; }

        /// <summary>
        /// Пользователь системы оставивший объявление
        /// </summary>
        [JsonIgnore]
        public User User { get; set; }

        /// <summary>
        /// Категория объявления
        /// </summary>
        [JsonProperty("category")]
        public long Category { get; set; }

        /// <summary>
        /// Статус объявления
        /// </summary>
        [JsonProperty("status")]
        public short Status { get; set; }

        /// <summary>
        /// Город 
        /// </summary>
        [JsonProperty("city")]
        public string City { get; set; }

        /// <summary>
        /// Телефон
        /// </summary>
        [JsonProperty("phone")]
        public string Phone { get; set; }

        /// <summary>
        /// Email
        /// </summary>
        [JsonProperty("email")]
        public string Email { get; set; }

        /// <summary>
        /// Объявление прикреплено
        /// </summary>
        [JsonProperty("sticked")]
        public bool Sticked { get; set; }

        /// <summary>
        /// Объявление новое
        /// </summary>
        [JsonProperty("new")]
        public bool New { get; set; }

        /// <summary>
        /// Объявление горячее
        /// </summary>
        [JsonProperty("hot")]
        public bool Hot { get; set; }

        /// <summary>
        /// Количество просмотров объявлений
        /// </summary>
        [JsonProperty("views")]
        public int Views { get; set; }

        /// <summary>
        /// Дата истечения объявления
        /// </summary>
        [JsonProperty("expirationDate")]
        public DateTime? ExpirationDate { get; set; }

        /// <summary>
        /// Дата создания
        /// </summary>
        [JsonProperty("dateCreated")]
        public DateTime? DateCreated { get; set; }

        /// <summary>
        /// Дата модификации
        /// </summary>
        [JsonProperty("dateModified")]
        public DateTime? DateModified { get; set; }

        /// <summary>
        /// Простой конструктор
        /// </summary>
        public AdvModel()
        {
        }

        /// <summary>
        /// Конструктор на основе доменной сущности
        /// </summary>
        /// <param name="entity">Сущность</param>
        public AdvModel(Adv entity)
        {
            Id = entity.Id;
            Title = entity.Title;
            Content = entity.Content;
            Tags = entity.Tags;
            Status = (short) entity.Status;
            User = entity.User;
            UserName = User != null ? User.GetDisplayName() : String.Empty;
            Category = entity.CategoryId;
            City = entity.City.DisplayName;
            Phone = entity.Phones;
            Email = entity.Email;
            Views = entity.Views;
            ExpirationDate = entity.ExpirationDate;
            Sticked = entity.Sticked;
            New = entity.New;
            Hot = entity.Hot;
            DateCreated = entity.DateCreated;
            DateModified = entity.DateModified;
        }
    }
}